class SOPPrompt:

    # 生成修改内容的提示词
    def gen_file_prompt(self, orig_SOPtext, pitext):
        GENPSFILEPROMPT = (
                "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下是一份A信息的json示例输出：\n"
                f"{orig_SOPtext}\n"
                '其中"index","sectionIndex","bodyChildIndex"代表位置信息，"text"代表文本内容，"tableCellInfos"代表单元格内容，"rowIndex"代表行索引,"columnIndex"代表列索引,"paragraphInfos"代表段落信息。\n'
                "现在，请参考以下提供的新的B信息：\n"
                f"{pitext}\n"
                "请按照以下具体要求更新A信息的json示例输出：\n"
                "1.仅修改json中text字段的文字或数值：仅对text字段中的内容进行必要的修改，不得添加新内容。\n"
                "2.禁止添加信息：不要在示例上增加新内容。\n"
                "3.生成的标题中包装形式要简写。比如直立式聚丙烯输液袋的简称是可立袋。\n"
                "4.注意化学式中，下标数字用<sub></sub>标签包裹。\n"
                "5.注意生成时, 不要把整数类型转换为浮点类型，不要进行单位转换。\n"
                "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPT

    def gen_file_prompt_temp(self, orig_SOPtext, pitext, temp):
        GENPSFILEPROMPTTEMP = (
            "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下给出一个示例：\n"
            "B信息为：\n"
            f"{temp}\n"
            "会生成一个json格式的A信息：\n"
            f"{orig_SOPtext}\n"
            "现在，请参考以下提供的新的B信息：\n"
            f"{pitext}\n"
            "请按照以下具体要求更新A信息的json示例输出：\n"
            "1.仅修改json中text字段的文字或数值：仅对text字段中的内容进行必要的修改，不得添加新内容。\n"
            "2.禁止添加信息：不要在示例上增加新内容。\n"
            "3.生成的标题中包装形式要简写。比如直立式聚丙烯输液袋的简称是可立袋。\n"
            "4.注意化学式中，下标数字用<sub></sub>标签包裹。\n"
            "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPTTEMP

    # 去掉不要的信息
    def cut_prompt(self, titles_text):
        CUTPROMPT = (
            f"以下是附件标题列表A：\n"
            f"{titles_text}\n"
            '请判断上述标题中有哪几个标题与如下标题列表B:\n'
            '["附件1：生产工艺流程图", "附件4：原辅料的内控质量标准", "附件6：制剂放行标准", "附件8：生产工艺确认书"]\n'
            '的其中一个内容基本一样，以列表形式返回这些标题列表A中标题，不要返回其它内容。'

        )
        return CUTPROMPT

    def extract_everyinfo_prompt(self, query, article):
        EXTRACTINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇md格式文章(带有html标签)：\n"
                f"{article}\n"
                "文章中有各条线的信息内容，现在请您只需要将"
                f"{query}"
                "内容细致详细摘录出来。摘录时注意，如果是表格信息就直接生成markdown格式表格，不要把整数类型转换为浮点类型，不要进行单位转换。注意【】符号包裹的内容代表'生产线_产品名称_产品规格'"
        )
        return EXTRACTINFOPROMPT

    # 提取产线信息的提示词
    def extract_info_prompt(self, query, article):
        EXTRACTINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各条线的工艺信息，这些信息有的是所有线共有的，有的是每条线特有的，现在请您将"
                f"{query}"
                "的特有的信息和所有线共有的信息细致详细摘录出来。摘录时注意，表格信息直接生成markdown格式表格。"
        )
        return EXTRACTINFOPROMPT


class BPRPrompt:
    def prescription_prompt(self, article):
        PRESCRIPTIONPROMPT = (
            "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
            f"{article}\n"
            "文章中有品种的各种信息，现在请您将该品种的处方内容摘录出来。"
            "表格信息直接生成markdown格式表格。"
        )
        return PRESCRIPTIONPROMPT

    # def prescription_info_prompt(self, article, prescription, query):
    #     PRESCRIPTIONINFOPROMPT = (
    #         "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
    #         f"{article}\n"
    #         f"文章中有品种的各类信息，现在请您只将{prescription}{query}内容摘录出来。\n"
    #         "表格信息直接生成markdown格式表格。"
    #     )
    #     return PRESCRIPTIONINFOPROMPT

    def weigh_modif_file_prompt(self, prescription_info):
        WEIGHMODIFFILEPROMPT = (
            "你是一位擅长摘录文章的员工。以下是一篇处方文章：\n"
            f"{prescription_info}\n"
            f"请将处方的原料(稀盐酸，氢氧化钠不算原料)摘录出来，并以如下列表形式返回。注意化学式中，下标数字用<sub></sub>标签包裹。\n"
            '["原料名称", "原料名称"]'
        )
        return WEIGHMODIFFILEPROMPT

    # 生成修改内容的提示词
    def gen_file_prompt(self, orig_BPRtext, SOPtext):
        GENPSFILEPROMPT = (
                "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下是一份A信息的json示例输出：\n"
                f"{orig_BPRtext}\n"
                "注意：json示例中，text字段的内容是'pre_key'字段内容的值。\n"
                "现在，请参考以下提供的新的B信息：\n"
                f"{SOPtext}\n"
                "请按照以下具体要求更新A信息的json示例输出：\n"
                "1.仅修改json中text字段的文字或数值：仅对text字段中的文字或数值进行必要的修改，不得添加新内容。\n"
                "2.禁止添加信息：不要在示例上增加新内容。\n"
                "3.浓配，稀配在配制流程中，请仔细寻找。\n"
                "4.注意化学式中，用下标数字用<sub></sub>标签包裹。\n"
                "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPT

    def gen_file_prompt_temp(self, orig_BPRtext, SOPtext, temp):
        GENPSFILEPROMPTTEMP = (
            "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下给出一个示例：\n"
            "B信息为：\n"
            f"{temp}\n"
            "会生成一个json格式的A信息：\n"
            f"{orig_BPRtext}\n"
            "注意：json示例中，text字段的内容是'pre_key'字段内容的值。\n"
            "现在，请参考以下提供的新的B信息：\n"
            f"{SOPtext}\n"
            "请按照以下具体要求更新A信息的json示例输出：\n"
            "1.仅修改json中text字段的文字或数值：仅对text字段中的文字或数值进行必要的修改，不得添加新内容。\n"
            "2.禁止添加信息：不要在示例上增加新内容。\n"
            "3.浓配，稀配在配制流程中，请仔细寻找。\n"
            "4.注意化学式中，用下标数字用<sub></sub>标签包裹。\n"
            "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPTTEMP

    # 提取工艺规程中除生产操作外的信息
    def extract_SOPinfo_prompt1(self, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将目的、适用及分发范围、产品信息、处方与生产配料表、主要操作间一览表、主要生产设备一览表的信息都摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTPSINFOPROMPT
    # 提取特定的生产操作环节信息
    def extract_SOPinfo_prompt2(self, query, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各环节的生产操作及工艺条件，现在请您将"
                f"{query}"
                "环节的生产操作及工艺条件摘录出来。"
        )
        return EXTRACTPSINFOPROMPT
    # 提取对应物料供应商信息
    def extract_supplierinfo_prompt(self, query, article):
        EXTRACTSUPPLIERINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各类物料供应商信息，现在请您将"
                f"{query}"
                "的供应商信息摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTSUPPLIERINFOPROMPT

    def extract_supplierinfo_prompt1(self, query, article):
        EXTRACTSUPPLIERINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各类物料供应商信息，现在请您依据以下信息"
                f"{query}"
                "将各原料的供应商信息摘录出来。只需返回摘录的供应商信息，不要返回其它内容。\n"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTSUPPLIERINFOPROMPT

    def extract_positionoperinfo_prompt(self, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将'灌装加热片封盖参数范围'的信息摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTPSINFOPROMPT

    def extract_material_prompt(self, article):
        EXTRACTMATERIALPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将该品种的原料提取出来，注意要排除掉活性炭，稀盐酸，氢氧化钠。判断是否有活性炭。提取调节PH值的材料有哪些。给出如下示例，按照示例格式返回\n"
                '{"count": 2, "materials": ["氯化钠(NaCl)", "葡萄糖(C6H12O6·H2O)"], "is_AC": false, "adjust_ph": [稀盐酸(HCl), 氢氧化钠(NaOH)]}\n'
                "count代表materials字段原料总数; materials代表有哪些原料,需要排除活性炭，稀盐酸，氢氧化钠; is_AC代表该品种是否需要活性炭; adjust_ph代表该品种调节ph值的材料有哪些。"

        )
        return EXTRACTMATERIALPROMPT



class BPRMultiBagPrompt:

    def prescription_prompt(self, article):
        PRESCRIPTIONPROMPT = (
            "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
            f"{article}\n"
            "文章中有品种各种信息，现在请您将该品种的处方名称都摘录出来。以如下列表形式返回。\n"
            '["处方名称", "处方名称"]'
        )
        return PRESCRIPTIONPROMPT

    def prescription_info_prompt(self, article, prescription, query):
        PRESCRIPTIONINFOPROMPT = (
            "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
            f"{article}\n"
            f"文章中有品种的各类信息，现在请您只将{prescription}{query}内容摘录出来。\n"
            "表格信息直接生成markdown格式表格。"
        )
        return PRESCRIPTIONINFOPROMPT

    def weigh_modif_file_prompt(self, prescription_info, prescription_name):
        WEIGHMODIFFILEPROMPT = (
            "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
            f"{prescription_info}\n"
            f"文章中有{prescription_name}的称量信息，现在请您只将{prescription_name}的原料(稀盐酸，氢氧化钠不算原料)摘录出来，并以如下列表形式返回。注意化学式中，下标数字用<sub></sub>标签包裹。\n"
            '["原料名称", "原料名称"]'
        )
        return WEIGHMODIFFILEPROMPT

    # 生成修改内容的提示词
    def gen_file_prompt(self, orig_BPRtext, SOPtext, special):
        GENPSFILEPROMPT = (
                "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下是一份A信息的json示例输出：\n"
                f"{orig_BPRtext}\n"
                "注意：json示例中，text字段的内容是'pre_key'字段内容的值。\n"
                "现在，请参考以下提供的新的B信息：\n"
                f"{SOPtext}\n"
                "请按照以下具体要求更新A信息的json示例输出：\n"
                "1.仅修改json中text字段的文字或数值：仅对text字段中的文字或数值进行必要的修改，不得添加新内容。\n"
                "2.禁止添加信息：不要在示例上增加新内容。\n"
                "3.注意化学式中，下标数字用<sub></sub>标签包裹。\n"
                f"{special}"
                "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPT

    def gen_file_prompt_temp(self, orig_BPRtext, SOPtext, temp):
        GENPSFILEPROMPTTEMP = (
            "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下给出一个示例：\n"
            "B信息为：\n"
            f"{temp}\n"
            "会生成一个json格式的A信息：\n"
            f"{orig_BPRtext}\n"
            "注意：json示例中，text字段的内容是'pre_key'字段内容的值。\n"
            "现在，请参考以下提供的新的B信息：\n"
            f"{SOPtext}\n"
            "请按照以下具体要求更新A信息的json示例输出：\n"
            "1.仅修改json中text字段的文字或数值：仅对text字段中的文字或数值进行必要的修改，不得添加新内容。\n"
            "2.禁止添加信息：不要在示例上增加新内容。\n"
            "3.注意化学式中，下标数字用<sub></sub>标签包裹。\n"
            "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPTTEMP

    # 提取工艺规程中除生产操作外的信息
    def extract_SOPinfo_prompt1(self, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将目的、适用及分发范围、产品信息、处方与生产配料表、主要操作间一览表、主要生产设备一览表的信息都摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTPSINFOPROMPT
    # 提取特定的生产操作环节信息
    def extract_SOPinfo_prompt2(self, query, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各环节的生产操作及工艺条件，现在请您将"
                f"{query}"
                "环节的生产操作及工艺条件摘录出来。"
        )
        return EXTRACTPSINFOPROMPT
    # 提取对应物料供应商信息
    def extract_supplierinfo_prompt(self, query, article):
        EXTRACTSUPPLIERINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各类物料供应商信息，现在请您将"
                f"{query}"
                "的供应商信息摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTSUPPLIERINFOPROMPT

    def extract_supplierinfo_prompt1(self, query, article):
        EXTRACTSUPPLIERINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各类物料供应商信息，现在请您依据以下信息"
                f"{query}"
                "将各原料的供应商信息摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTSUPPLIERINFOPROMPT

    def extract_material_prompt(self, article):
        EXTRACTMATERIALPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将该品种的原料提取出来，注意要排除掉活性炭，稀盐酸，氢氧化钠。判断是否有活性炭。提取调节PH值的材料有哪些。给出如下示例，按照示例格式返回\n"
                '{"count": 2, "materials": ["氯化钠(NaCl)", "葡萄糖(C6H12O6·H2O)"], "is_AC": false, "adjust_ph": [稀盐酸(HCl), 氢氧化钠(NaOH)]}\n'
                "count代表materials字段原料总数; materials代表有哪些原料,需要排除活性炭，稀盐酸，氢氧化钠; is_AC代表该品种是否需要活性炭; adjust_ph代表该品种调节ph值的材料有哪些。"

        )
        return EXTRACTMATERIALPROMPT


class BPRSolidPrompt:
    def gen_file_prompt(self, orig_BPRtext, SOPtext):
        GENPSFILEPROMPT = (
                "你是一位负责记录A信息的员工。A信息基于提供的B信息生成。以下是一份A信息的json示例输出：\n"
                f"{orig_BPRtext}\n"
                "注意：json示例中，text字段的内容是'pre_key'字段内容的值。\n"
                "现在，请参考以下提供的新的B信息：\n"
                f"{SOPtext}\n"
                "请按照以下具体要求更新A信息的json示例输出：\n"
                "1.仅修改json中text字段的文字或数值：仅对text字段中的文字或数值进行必要的修改，不得添加新内容。\n"
                "2.禁止添加信息：不要在示例上增加新内容。\n"
                "3.浓配，稀配在配制流程中，请仔细寻找。\n"
                "4.注意化学式中，用下标数字用<sub></sub>标签包裹。\n"
                "请仔细检查所提供的B信息，并根据以上要求，提供更新后的json示例输出, 且只输出json字符串，不要输出其它内容。"
        )
        return GENPSFILEPROMPT

    def extract_SOPinfo_prompt1(self, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各种信息，现在请您将目的、适用及分发范围、产品信息、处方与生产配料表、主要操作间一览表、主要生产设备一览表、关键生产用仪器一览表的信息都摘录出来。"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTPSINFOPROMPT

    # 提取特定的生产操作环节信息
    def extract_SOPinfo_prompt2(self, query, article):
        EXTRACTPSINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "现在请您将"
                f"{query}"
                "的内容摘录出来。"
        )
        return EXTRACTPSINFOPROMPT

    # 提取对应物料供应商信息
    def extract_supplierinfo_prompt1(self, query, article):
        EXTRACTSUPPLIERINFOPROMPT = (
                "你是一位擅长摘录文章的员工。以下是一篇文章：\n"
                f"{article}\n"
                "文章中有各类物料供应商信息，现在请您依据以下信息"
                f"{query}"
                "将各原料的供应商信息摘录出来。只需返回摘录的供应商信息，不要返回其它内容。\n"
                "表格信息直接生成markdown格式表格。"
        )
        return EXTRACTSUPPLIERINFOPROMPT